前面已經做完編輯 Go 程式的設定,我們這一篇來看在真正編輯 Go 程式時,可以使用到的各項功能
根據 Go 對於 workspace 的要求,我們在 $GOPATH/src/github.com/jerryhsieh/ 下先建立一個子目錄 myutil,然後建立一個檔案 main.go
src/github.com/jerryhsieh/
├── myproject
│ └── main.go
└── myutil
└── main.go
先檢查一下設定
對於語法檢查的部分,按 Ctrl-c ! v
來看 flycheck 的設定,
可以看到 flycheck+go-golint 已經設定完成
對於語法補全的部分,檢查 Ctrl-h v company-backends
,可以見到,我們設定的 (company-go company-files company-yasnippet company-capf) 已經在第一個選擇群組中
使用 package myutil
來設定這個是一個 myutil 的函式庫,按 func
展開 yansippet
// name...
func name(args) {
}
打入 name ,註解的 name 會隨著改變,打入參數 (args) 跟 函式返回資料型態
按 Meta-x yas-describe-table
會顯示在 Go 模式下預設的程式片段
繼續打入程式,當參考到參數時,自動補全會自動顯示
移動游標時,小緩衝區的 Eldoc 會顯示這個參數的資料型態
使用 Meta-x company-diag
來看 Company 的執行情況
我們接著寫第二個函式,假設這次故意漏掉函式返回的資料型態,flycheck 會用粉紅色顯示這個錯誤,並在小緩衝區顯示錯誤的原因
按 Ctrl-c ! l
來看語法錯誤跟警告訊息
修改完畢後,存檔,這時 gofmt 會自動排版然後儲存
使用 go install
來安裝函式庫,這時,會在 $GOPATH 下產生一個 pkg
子目錄,裡面會有 myutil.a
的函式庫
在 $GOPATH/src/github.com/jerryhsieh/ 下先建立一個子目錄 myproject,建立一個程式 main.go
因為是執行檔,所以 pakcage 是 main
使用 Ctrl-c Ctrl-a
來做函式庫的 import import "fmt"
Ctrl-c Ctrl-a
會執行 go-import-add
打入 main
會展開
func main() {
}
打入 fmt.P
會自動補全 P 開頭的函式
接著打完 fmt.Println("Hello")
,我們試把 import 刪除
按下 Ctrl-x Ctlr-s
存檔時,goimport 會將 import "fmt"
自動加入
現在來 import 我們剛寫的函式庫,按Ctrl-c Ctrl-a
,在 ivy-mode 下打入 my
就可以看到那個函式庫
import 進來後,就可以使用自動補全來展開我們寫的函式
同時也會帶出參數的資料型態
跳到函式定義,使用 godef Ctrl-c Ctrl-j
godef-jump-to-other-window
會顯示獨立的視窗
使用 Guru 前,須先設定 scope 可以使用下列函式
(defun my/go-guru-set-current-package-as-main ()
"GoGuru requires the scope to be set to a go package which
contains a main, this function will make the current package the
active go guru scope, assuming it contains a main"
(interactive)
(let* ((filename (buffer-file-name))
(gopath-src-path (concat (file-name-as-directory (go-guess-gopath)) "src"))
(relative-package-path (directory-file-name (file-name-directory (file-relative-name filename gopath-src-path)))))
(setq go-guru-scope relative-package-path)))
執行 Meta-x my/go-guru-set-current-package-as-main
來設定 scope
這樣就可以執行 Guru 的功能,例如 guru-describe 使用 Ctrl-c Ctrl-o d
執行結果如圖,會有這個函式的定義所在等等資訊
可以在 emacs shell 下執行 go run
也可以在 go install
完後,直接執行 myproject
相關影片
相關簡報: 簡報
相關程式: Github 請下載到 ~/.emacs.d/ 下,啟動 Emacs 就會自動安裝
相關資訊: 我的部落格